package org.mbcorp.sar.dao;

import java.util.Date;
import java.util.List;

import org.mbcorp.sar.model.Fase;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface FaseDAO extends JpaRepository<Fase, Integer> {
	
	@Query("SELECT f FROM Fase f WHERE f.solicitud.flagAprobado = TRUE AND f.fechaInicio is NULL AND f.solicitud.flagBaja = FALSE ORDER BY f.fechaProgramadaInicio")
    public List<Fase> buscarFasesNoActivas();
	
	@Query("SELECT f FROM Fase f WHERE f.solicitud.flagAprobado = TRUE AND (f.solicitud.solicitante.cliente.razonSocial like %:cliente% OR f.solicitud.solicitante.cliente.nombreComercial like %:cliente% ) AND f.fechaInicio is NULL AND f.solicitud.flagBaja = FALSE ORDER BY f.fechaProgramadaInicio")
	public List<Fase> buscarFasesNoActivasPorCliente(@Param("cliente")String cliente);
	
	@Query("SELECT DISTINCT f FROM Fase f, Operador o, Horario h WHERE f.fechaInicio IS NOT NULL AND f.fechaFin IS NULL AND f.solicitud.flagBaja = FALSE AND o.login = :login AND h.fase = f.id AND h.operador = o.id")
    public List<Fase> buscarFasesActivasPorOperador(@Param("login")String loginOperadorActual);
	
	@Query("SELECT DISTINCT f FROM Fase f, Operador o, Horario h WHERE f.fechaInicio BETWEEN :fechainicio AND :fechafin AND f.fechaFin IS NULL AND f.solicitud.flagBaja = FALSE AND o.login = :login AND h.fase = f.id AND h.operador = o.id")
    public List<Fase> buscarFasesActivasPorOperadorFecha(@Param("login")String loginOperadorActual, @Param("fechainicio")Date fechaInicio, @Param("fechafin")Date fechaFin);

	@Query("SELECT DISTINCT f FROM Fase f, Operador o, Horario h WHERE (f.solicitud.solicitante.cliente.razonSocial like %:cliente% OR f.solicitud.solicitante.cliente.nombreComercial like %:cliente% ) AND f.fechaInicio IS NOT NULL AND f.fechaFin IS NULL AND f.solicitud.flagBaja = FALSE AND o.login = :login AND h.fase = f.id AND h.operador = o.id")
    public List<Fase> buscarFasesActivasPorOperadorCliente(@Param("login")String loginOperadorActual, @Param("cliente")String cliente);

	@Query("SELECT DISTINCT f FROM Fase f, Operador o, Horario h WHERE (f.solicitud.solicitante.cliente.razonSocial like %:cliente% OR f.solicitud.solicitante.cliente.nombreComercial like %:cliente% ) AND f.fechaInicio BETWEEN :fechainicio AND :fechafin AND f.fechaFin IS NULL AND f.solicitud.flagBaja = FALSE AND o.login = :login AND h.fase = f.id AND h.operador = o.id")
	public List<Fase> buscarFasesActivasPorOperadorFechaCliente(@Param("login")String loginOperadorActual, @Param("fechainicio")Date fechaInicio, @Param("fechafin")Date fechaFin, @Param("cliente")String cliente);

}
